package main

import "fmt"

func main() {
	fmt.Println(longestValidParentheses("())"))
}

/**
 * 描述
 * 给出一个仅包含字符'('和')'的字符串，计算最长的格式正确的括号子串的长度。
 * 对于字符串"(()"来说，最长的格式正确的子串是"()"，长度为2.
 * 再举一个例子：对于字符串")()())",来说，最长的格式正确的子串是"()()"，长度为4.
 * @param s string字符串
 * @return int整型
 */
func longestValidParentheses(s string) int {
	// write code here
	length := len(s)
	flags := make([]int, length, length)
	stacks := make([]int, length, length)
	lastIndex := -1

	deep := 0
	for i, value := range s {
		if value == '(' {
			deep++
			flags[i] = deep
			lastIndex++;
			stacks[lastIndex] = i
		} else if value == ')' {
			if deep > 0 {
				deep--
				flags[stacks[lastIndex]] = -1
				flags[i] = -1
				lastIndex--
			} else if deep == 0 {
				flags[i] = 0
			}
		}
	}

	var count int = 0
	var max int = 0
	for _, value := range flags {
		if value == -1 {
			count++
			if count > max {
				max = count
			}
		} else {
			count = 0
		}
	}

	return max
}
